package org.vincen.helloworld.poi;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.hwpf.usermodel.Table;
import org.apache.poi.hwpf.usermodel.TableRow;
import org.junit.Test;

import static org.junit.Assert.*;

/**
 * export microsoft word by poi
 * 
 * @author vincen
 */
public class NewWordDocument {

	/**
	 * 这个demo在webapp跑不起来，会报字符编码错误，该错误暂未找到解决办法
	 */
	@Test
	public void testInnerTableCellsDetection() {
		HWPFDocument hwpfDocument = null;
		try {
			//读入模版文件
			/*
			   2012年周、月、季、年12342投诉受理情况
			   ----------------------------------------------
			   |投诉类别		|投诉数量（件）		|受理量比率	|
			   |占道经营		|					|			|
			   |市容环境卫生	|					|			|		
			   |环境保护		|					|			|		
			   |建筑工地		|					|			|
			   |城市规划		|					|			|
			   |车辆清洗		|					|			|
			   |机动车停放	|					|			|	
			   |户外广告		|					|			|
			   |城市绿化		|					|			|
			   |投诉总量		|					|			|
			   |咨询			|					|			|
			   |合计			|					|			|
			   ----------------------------------------------
			 */
			hwpfDocument = new HWPFDocument(new FileInputStream("template3.doc"));
		} catch (IOException e) {
			e.printStackTrace();
		}
		//Returns the range which covers the whole of the document, but excludes any headers and footers.
		Range documentRange = hwpfDocument.getRange();
		//获得table，从0开始计数，一个回车就是一段
		Paragraph startOfTable = documentRange.getParagraph(2);
		//在此打印表格的行数
		Table innerTable = documentRange.getTable(startOfTable);
		assertEquals(13, innerTable.numRows());
		//在此打印表格的列数
		TableRow tableRow = innerTable.getRow(0);
		assertEquals(3, tableRow.numCells());
		//向表格的第二行第二列、第三列插入两个值。注意此处insertBefore意思是，光标之前，
		//还可使用：innterTable.getRow(1).getCell(0).insertAfter("text"),光标之后，即下一个单位格
		innerTable.getRow(1).getCell(1).insertBefore("高星");
		innerTable.getRow(1).getCell(2).insertBefore("高星");
		try {
			//写出文件
			hwpfDocument.write(new FileOutputStream("new3.doc"));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
